#  -*- coding: utf-8 -*-
import webapp2
import exceptions
import datetime
import cgi
from session import Session
from webapp2 import uri_for
from google.appengine.ext import ndb

# Заглушки. Как еще...

MONTHS = [u"Января", u"Февраля", u"Марта", u"Апреля", u"Мая", u"Июня", u"Июля",
          u"Августа", u"Сентября", u"Октября", u"Ноября", u"Декабря"]
DAYS_OF_WEEK = [u"Понедельник", u"Вторник", u"Среда", u"Четверг",
                u"Пятница", u"Суббота", u"Воскресенье"]

# javascript для перезагрузки страницы через некоторое время,
# т.к база данных обновляется не моментально

javascript_reload = u"""
    <script type="text/javascript">
        parameter = window.location.href.split("?").slice(1).join("?");
        if (parameter == "reload") {
            setTimeout('window.location.href = \
window.location.href.split("?")[0];', 1000);
            setTimeout('\
document.write("<p align=center> Происходит переадресация. <br> Если ваш браузер не поддерживает автоматическую переадресацию \
, то нажмите <b><a href=\\'/\\' > сюда. </a></b><\p>");', 50);
        }
    </script>
"""


class ViewCurrentState(webapp2.RequestHandler):
    def __init__(self, *argc, **kwargs):
        super(ViewCurrentState, self).__init__(*argc, **kwargs)

    def get(self, *args, **kwargs):
        sessions_query = Session.query().order(Session.start_date)
        self.response.write(u"""
        <html>
            <head>
                %s
            </head>
            <body>
            <form action="%s" method="get"><input type="submit" \
            value="Все смены"></form>
        """ % (unicode(javascript_reload), uri_for('show_list')))
        self.response.write(u"""
            Сегодня %d %s %d года. %s. <br>
        """ % (datetime.date.today().day, MONTHS[datetime.date.today().month], datetime.date.today().year,
               DAYS_OF_WEEK[datetime.date.today().weekday()]))
        session_founded = False
        for session in sessions_query:
            if (session.start_date <= datetime.date.today()) and (session.end_date >= datetime.date.today()):
                if not session_founded:
                        session_founded = True
                        self.response.write(u"Текущие смены: <ul>")
                self.response.write(u"<li>")
                self.response.write(u"""<b>\"%s\"</b> С %s по %s""" % (session.name, session.start_date, session.end_date))
        if not session_founded:
            self.response.write(u"""
            К сожалению, в данный момент не проходит ни одна смена.
            </body>
            </html>
            """)
        else:
            self.response.write("""
                </ul>
                </body>
                </html>
            """)


class ViewList(webapp2.RequestHandler):
    def __init__(self, *argc, **kwargs):
        super(ViewList, self).__init__(*argc, **kwargs)

    def get(self, *argc, **kwargs):
        sessions_query = Session.query().order(Session.start_date)
        self.response.write(u"""
        <html>
            <head>
                %s
            </head>
            <body>
                <form action="%s" method="get"><input type="submit" value="Текущие смены"></form>
        """ % (javascript_reload, uri_for('show')))
        session_founded = False
        self.response.write(u"""<ul>""")
        for session in sessions_query:
            session_founded = True
            self.response.write(u"<li>")
            self.response.write(u"""<b>\"%s\"</b> С %s по %s""" % (session.name, session.start_date, session.end_date))
            self.response.write(u"""<form action="%s" method="post"><input id="name" name="name" type="text" style="display:none" value="%s">\
            <input type="submit" value="Удалить" > </form>""" %
                                (uri_for('delete_session'), unicode(session.key.urlsafe())))

        if not session_founded:
            self.response.write(u"К сожалению, пока не создана ни одна смена.")
        else:
            self.response.write("</ul>")
        self.response.write("""
            <form action="%s" method="post">
                <input name="SessionName"   type="text" value="Название смены">
                <input name="SessionStart" type="date" value = "%s">
                <input name="SessionEnd" type="date" value = "%s">
                <input type="submit" value="Создать новую смену">
            </form>
            </form>
            </body>
            </html>
        """ % (uri_for('add_session'), str(datetime.date.today()), str(datetime.date.today())))


class DeleteElement(webapp2.RequestHandler):
    def __init__(self, *args, **kwargs):
        super(DeleteElement, self).__init__(*args, **kwargs)

    def post(self, *args, **kwargs):
        try:
            delete_key = self.request.get('name')
        except exceptions.ValueError:
            self.redirect(uri_for('show'))
            return
        try:
            delete_session = ndb.Key(urlsafe=delete_key)
        except exceptions.ValueError:
            self.redirect(uri_for('show'))
            return
        delete_session.delete()
        self.redirect(uri_for('show') + "?reload")


class AddElement(webapp2.RequestHandler):
    def __init__(self, *args, **kwargs):
        super(AddElement, self).__init__(*args, **kwargs)

    def post(self, *args, **kwargs):
        try:
            session_name = self.request.get('SessionName')
            session_start = self.request.get('SessionStart')
            session_end = self.request.get('SessionEnd')
        except exceptions.ValueError:
            print "Oops. Something went wrong."
            self.redirect(uri_for('show'))
            return
        # should be TRY here, but has no time =(

        session_start = session_start.split('-')
        session_start_date = datetime.date(int(session_start[0]), int(session_start[1]), int(session_start[2]))

        session_end = session_end.split('-')
        session_end_date = datetime.date(int(session_end[0]), int(session_end[1]), int(session_end[2]))

        new_session = Session(name=session_name,
                              start_date=session_start_date, end_date=session_end_date)  # Создаём новую смену
        new_session.put()  # и записываем ее
        self.redirect(uri_for('show') + "?reload")
